import { defineStore } from 'pinia'
import type { Product } from '~/types'
import {storage} from '~/utils/storage'
export interface CartItem {
  product: Product
  quantity: number
}


// 购物车状态管理
export const useCartStore = defineStore('cart', () => {
  // TODO: 实现购物车状态
  const items = ref<CartItem[]>([]) // 购物车商品列表

  // 购物车商品数量
  const count = computed(() =>{
    return items.value.reduce((sum,item) =>sum + item.quantity,0)
  })

  // 购物车总价

  const total = computed(() =>{
    return items.value.reduce((sum,item) =>sum + item.product.price * item.quantity,0)
  })

  // 从本地存储恢复购物车
  function initCart(){
    if(process.client){
      const saved = storage.get('cart')
      if(saved){
        items.value = saved as CartItem[]
      }
    }
  }

  // 保存到本地存储
  function saveCart(){
    if(process.client){
      storage.set('cart',items.value)
    }
  }
  
  // 添加到购物车
  function addItem(product:Product,quantity = 1){
    const existingItem = items.value.find(item =>item.product.id === product.id)
    if(existingItem){
      existingItem.quantity += quantity
    }else{
      items.value.push({product,quantity})
    }
    saveCart()
  }

  // 更新数量
  function updateQuantity(productId:string,quantity:number){
    const item = items.value.find(item =>item.product.id === productId)
    if(item){
      item.quantity = Math.max(1,quantity)
    }
    saveCart()
  }

  // 移除商品
  function removeItem(productId:string){
    items.value = items.value.filter(item =>item.product.id !== productId)
    saveCart()
  }
  
  // 清空购物车
  function clearCart(){
    items.value = []
    saveCart()
  }
  
  // 检查商品是否在购物车中
  function hasItem(productId:string){
    return items.value.some(item =>item.product.id === productId)
  }
  
  return {
    items,
    count,
    total,
    initCart,
    addItem,
    updateQuantity,
    removeItem,
    clearCart,
    hasItem,
  }
  
})

